package com.chenyongjing.design.pattern.flyweight.jdkString;

/**
 * String的优化增加了一个常量池
 */
public class StringTest {
    public static void main(String[] args) {
        String s1 = "hello";// 现在常量池中一个hello
        String s2 = "hello";// 现在常量池中一个hello
        System.out.println(s1==s2);

        String s3 = "he"+"llo"; // 现在常量池中一个hello
        System.out.println(s1==s3);

        String s4 = "hel"+new String("lo"); //常量池中有三个值hello，hel,lo，内存还有一个对象lo复制给对象
        System.out.println(s1==s4);

        String s5 = new String("hello");// s5重新创建一个对象
        System.out.println(s1==s5);
        System.out.println(s4==s5); //两个不同的对象

        String  s6  = s5.intern(); //从缓存中取值
        System.out.println(s1==s6);

        String s7 = "h";
        String s8 = "ello";
        String s9 = s7+s8;//编译阶段是变量不会做优化
        System.out.println(s1==s9);
    }
}
